Check in new transformation filter "transform".
authoroliskoli <oliskoli>
Mon, 30 Oct 2006 20:08:04 +0000 (20:08 +0000)
committeroliskoli <oliskoli>
Mon, 30 Oct 2006 20:08:04 +0000 (20:08 +0000)
Makefile.in
filter_vecs.c
reference/transform-rte.gpx [new file with mode: 0644]
reference/transform-wpt.gpx [new file with mode: 0644]
testo
transform.c [new file with mode: 0644]
xmldoc/filters/transform.xml [new file with mode: 0644]

index 2c674fb18e7b97a57ac3ec1f627b0612eb969062..c6c6aff56d1163cad778510b5d756308a93b6f06 100644 (file)
@@ -57,7 +57,7 @@ FMTS=magproto.o gpx.o geo.o mapsend.o mapsource.o garmin_tables.o \
 
 FILTERS=position.o radius.o duplicate.o arcdist.o polygon.o smplrout.o \
        reverse_route.o sort.o stackfilter.o trackfilter.o discard.o \
-       nukedata.o interpolate.o
+       nukedata.o interpolate.o transform.o
 
 JEEPS=jeeps/gpsapp.o jeeps/gpscom.o \
        jeeps/gpsmath.o jeeps/gpsmem.o  \
@@ -572,6 +572,7 @@ tpo.o: tpo.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
 trackfilter.o: trackfilter.c defs.h config.h queue.h gbtypes.h \
   zlib/zlib.h zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h \
   filterdefs.h strptime.h grtcirc.h
+transform.o: transform.c defs.h filterdefs.h
 unicsv.o: unicsv.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
   zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h csv_util.h \
   jeeps/gpsmath.h jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h \
index 2dc2f42a8d4631490aff08d69878830edfefdc83..8dee6d560a8fbe20e1919705f1cf2aa092086336 100644 (file)
@@ -42,6 +42,7 @@ extern filter_vecs_t trackfilter_vecs;
 extern filter_vecs_t discard_vecs;
 extern filter_vecs_t nuke_vecs;
 extern filter_vecs_t interpolatefilt_vecs;
+extern filter_vecs_t transform_vecs;
 
 static
 fl_vecs_t filter_vec_list[] = {
@@ -111,6 +112,11 @@ fl_vecs_t filter_vec_list[] = {
                "track",
                "Manipulate track lists"
        },
+       {
+               &transform_vecs,
+               "transform",
+               "Transformate waypoints into a route, tracks into routes, ..."
+       },
 #endif
         {
                NULL,
diff --git a/reference/transform-rte.gpx b/reference/transform-rte.gpx
new file mode 100644 (file)
index 0000000..f9995b1
--- /dev/null
@@ -0,0 +1,783 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="42.401051000" minlon ="-71.126602000" maxlat="42.468655000" maxlon="-71.102973000" />
+<rte>
+  <rtept lat="42.438878000" lon="-71.119277000">
+    <ele>44.586548</ele>
+<time>2001-11-28T21:05:28Z</time>
+    <name>5066</name>
+    <cmt>5066</cmt>
+    <desc>5066</desc>
+    <sym>Crossing</sym>
+<type>Crossing</type>
+  </rtept>
+  <rtept lat="42.439227000" lon="-71.119689000">
+    <ele>57.607200</ele>
+<time>2001-06-02T03:26:55Z</time>
+    <name>5067</name>
+    <cmt>5067</cmt>
+    <desc>5067</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.438917000" lon="-71.116146000">
+    <ele>44.826904</ele>
+<time>2001-11-16T23:03:38Z</time>
+    <name>5096</name>
+    <cmt>5096</cmt>
+    <desc>5096</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.443904000" lon="-71.122044000">
+    <ele>50.594727</ele>
+<time>2001-11-28T21:05:28Z</time>
+    <name>5142</name>
+    <cmt>5142</cmt>
+    <desc>5142</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.447298000" lon="-71.121447000">
+    <ele>127.711200</ele>
+<time>2001-06-02T03:26:58Z</time>
+    <name>5156</name>
+    <cmt>5156</cmt>
+    <desc>5156</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.454873000" lon="-71.125094000">
+    <ele>96.926400</ele>
+<time>2001-06-02T03:26:59Z</time>
+    <name>5224</name>
+    <cmt>5224</cmt>
+    <desc>5224</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.459079000" lon="-71.124988000">
+    <ele>82.600800</ele>
+<time>2001-06-02T03:26:59Z</time>
+    <name>5229</name>
+    <cmt>5229</cmt>
+    <desc>5229</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.456979000" lon="-71.124474000">
+    <ele>82.905600</ele>
+<time>2001-06-02T03:26:59Z</time>
+    <name>5237</name>
+    <cmt>5237</cmt>
+    <desc>5237</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.454401000" lon="-71.120990000">
+    <ele>66.696655</ele>
+<time>2001-11-28T21:05:28Z</time>
+    <name>5254</name>
+    <cmt>5254</cmt>
+    <desc>5254</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.451442000" lon="-71.121746000">
+    <ele>74.627442</ele>
+<time>2001-11-07T23:53:41Z</time>
+    <name>5258</name>
+    <cmt>5258</cmt>
+    <desc>5258</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.454404000" lon="-71.120660000">
+    <ele>65.254761</ele>
+<time>2001-11-28T21:05:28Z</time>
+    <name>5264</name>
+    <cmt>5264</cmt>
+    <desc>5264</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.457761000" lon="-71.121045000">
+    <ele>77.419200</ele>
+<time>2001-06-02T03:27:00Z</time>
+    <name>526708</name>
+    <cmt>526708</cmt>
+    <desc>526708</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.457089000" lon="-71.120313000">
+    <ele>74.676000</ele>
+<time>2001-06-02T03:27:00Z</time>
+    <name>526750</name>
+    <cmt>526750</cmt>
+    <desc>526750</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.456592000" lon="-71.119676000">
+    <ele>78.713135</ele>
+<time>2001-11-07T23:53:41Z</time>
+    <name>527614</name>
+    <cmt>527614</cmt>
+    <desc>527614</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.456252000" lon="-71.119356000">
+    <ele>78.713135</ele>
+<time>2001-11-07T23:53:41Z</time>
+    <name>527631</name>
+    <cmt>527631</cmt>
+    <desc>527631</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.458148000" lon="-71.119135000">
+    <ele>68.275200</ele>
+<time>2001-06-02T03:27:00Z</time>
+    <name>5278</name>
+    <cmt>5278</cmt>
+    <desc>5278</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.459377000" lon="-71.117693000">
+    <ele>64.008000</ele>
+<time>2001-06-02T03:27:01Z</time>
+    <name>5289</name>
+    <cmt>5289</cmt>
+    <desc>5289</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.464183000" lon="-71.119828000">
+    <ele>52.997925</ele>
+<time>2001-11-28T21:05:28Z</time>
+    <name>5374FIRE</name>
+    <cmt>5374FIRE</cmt>
+    <desc>5374FIRE</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.465650000" lon="-71.119399000">
+    <ele>56.388000</ele>
+<time>2001-06-02T03:27:02Z</time>
+    <name>5376</name>
+    <cmt>5376</cmt>
+    <desc>5376</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.439018000" lon="-71.114456000">
+    <ele>56.388000</ele>
+<time>2001-06-02T03:26:55Z</time>
+    <name>6006</name>
+    <cmt>600698</cmt>
+    <desc>600698</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.438594000" lon="-71.114803000">
+    <ele>46.028564</ele>
+<time>2001-11-28T21:05:28Z</time>
+    <name>6006BLUE</name>
+    <cmt>6006BLUE</cmt>
+    <desc>6006BLUE</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.436757000" lon="-71.113223000">
+    <ele>37.616943</ele>
+<time>2001-11-28T21:05:28Z</time>
+    <name>6014MEADOW</name>
+    <cmt>6014MEADOW</cmt>
+    <desc>6014MEADOW</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.441754000" lon="-71.113220000">
+    <ele>56.388000</ele>
+<time>2001-06-02T03:26:55Z</time>
+    <name>6029</name>
+    <cmt>6029</cmt>
+    <desc>6029</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.436243000" lon="-71.109075000">
+    <ele>50.292000</ele>
+<time>2001-06-02T03:27:05Z</time>
+    <name>6053</name>
+    <cmt>6053</cmt>
+    <desc>6053</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.439250000" lon="-71.107500000">
+    <ele>25.603200</ele>
+<time>2001-06-02T03:26:57Z</time>
+    <name>6066</name>
+    <cmt>6066</cmt>
+    <desc>6066</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.439764000" lon="-71.107582000">
+    <ele>34.442400</ele>
+<time>2001-06-02T03:26:57Z</time>
+    <name>6067</name>
+    <cmt>6067</cmt>
+    <desc>6067</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.434766000" lon="-71.105874000">
+    <ele>30.480000</ele>
+<time>2001-06-02T03:26:57Z</time>
+    <name>6071</name>
+    <cmt>6071</cmt>
+    <desc>6071</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.433304000" lon="-71.106599000">
+    <ele>15.240000</ele>
+<time>2001-06-02T03:26:56Z</time>
+    <name>6073</name>
+    <cmt>6073</cmt>
+    <desc>6073</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.437338000" lon="-71.104772000">
+    <ele>37.795200</ele>
+<time>2001-06-02T03:26:57Z</time>
+    <name>6084</name>
+    <cmt>6084</cmt>
+    <desc>6084</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.442196000" lon="-71.110975000">
+    <ele>64.008000</ele>
+<time>2001-06-02T03:26:55Z</time>
+    <name>6130</name>
+    <cmt>6130</cmt>
+    <desc>6130</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.442981000" lon="-71.111441000">
+    <ele>64.008000</ele>
+<time>2001-06-02T03:26:58Z</time>
+    <name>6131</name>
+    <cmt>6131</cmt>
+    <desc>6131</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.444773000" lon="-71.108882000">
+    <ele>62.788800</ele>
+<time>2001-06-02T03:27:05Z</time>
+    <name>6153</name>
+    <cmt>6153</cmt>
+    <desc>6153</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.443592000" lon="-71.106301000">
+    <ele>55.473600</ele>
+<time>2001-06-02T03:27:05Z</time>
+    <name>6171</name>
+    <cmt>6171</cmt>
+    <desc>6171</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.447804000" lon="-71.106624000">
+    <ele>62.484000</ele>
+<time>2001-06-02T03:27:04Z</time>
+    <name>6176</name>
+    <cmt>6176</cmt>
+    <desc>6176</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.448448000" lon="-71.106158000">
+    <ele>62.179200</ele>
+<time>2001-06-02T03:27:04Z</time>
+    <name>6177</name>
+    <cmt>6177</cmt>
+    <desc>6177</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.453415000" lon="-71.106783000">
+    <ele>69.799200</ele>
+<time>2001-06-02T03:26:55Z</time>
+    <name>6272</name>
+    <cmt>6272</cmt>
+    <desc>6272</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.453434000" lon="-71.107253000">
+    <ele>73.152000</ele>
+<time>2001-06-02T03:26:56Z</time>
+    <name>6272</name>
+    <cmt>6272</cmt>
+    <desc>6272</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.458298000" lon="-71.106771000">
+    <ele>70.104000</ele>
+<time>2001-06-02T03:27:04Z</time>
+    <name>6278</name>
+    <cmt>6278</cmt>
+    <desc>6278</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.451430000" lon="-71.105413000">
+    <ele>57.564209</ele>
+<time>2001-11-16T23:03:38Z</time>
+    <name>6280</name>
+    <cmt>6280</cmt>
+    <desc>6280</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.453845000" lon="-71.105206000">
+    <ele>66.696655</ele>
+<time>2001-11-16T23:03:38Z</time>
+    <name>6283</name>
+    <cmt>6283</cmt>
+    <desc>6283</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.459986000" lon="-71.106170000">
+    <ele>72.945191</ele>
+<time>2001-11-16T23:03:38Z</time>
+    <name>6289</name>
+    <cmt>6289</cmt>
+    <desc>6289</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.457616000" lon="-71.105116000">
+    <ele>72.847200</ele>
+<time>2001-06-02T03:27:04Z</time>
+    <name>6297</name>
+    <cmt>6297</cmt>
+    <desc>6297</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.467110000" lon="-71.113574000">
+    <ele>53.644800</ele>
+<time>2001-06-02T03:27:02Z</time>
+    <name>6328</name>
+    <cmt>6328</cmt>
+    <desc>6328</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.464202000" lon="-71.109863000">
+    <ele>43.891200</ele>
+<time>2001-06-02T03:27:03Z</time>
+    <name>6354</name>
+    <cmt>6354</cmt>
+    <desc>6354</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.466459000" lon="-71.110067000">
+    <ele>48.768000</ele>
+<time>2001-06-02T03:27:02Z</time>
+    <name>635722</name>
+    <cmt>635722</cmt>
+    <desc>635722</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.466557000" lon="-71.109410000">
+    <ele>49.072800</ele>
+<time>2001-06-02T03:27:02Z</time>
+    <name>635783</name>
+    <cmt>635783</cmt>
+    <desc>635783</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.463495000" lon="-71.107117000">
+    <ele>62.484000</ele>
+<time>2001-06-02T03:27:03Z</time>
+    <name>6373</name>
+    <cmt>6373</cmt>
+    <desc>6373</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.401051000" lon="-71.110241000">
+    <ele>3.962400</ele>
+<time>2001-06-02T03:26:56Z</time>
+    <name>6634</name>
+    <cmt>6634</cmt>
+    <desc>6634</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.432621000" lon="-71.106532000">
+    <ele>13.411200</ele>
+<time>2001-06-02T03:26:56Z</time>
+    <name>6979</name>
+    <cmt>6979</cmt>
+    <desc>6979</desc>
+    <sym>Dot</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.431033000" lon="-71.107883000">
+    <ele>34.012085</ele>
+<time>2001-11-16T23:03:38Z</time>
+    <name>6997</name>
+    <cmt>6997</cmt>
+    <desc>6997</desc>
+    <sym>Dot</sym>
+<type>Dot</type>
+  </rtept>
+  <rtept lat="42.465687000" lon="-71.107360000">
+    <ele>87.782400</ele>
+<time>2001-06-02T03:27:03Z</time>
+    <name>BEAR HILL</name>
+    <cmt>BEAR HILL TOWER</cmt>
+    <desc>Bear Hill Tower</desc>
+    <sym>Tall Tower</sym>
+<type>Tower</type>
+  </rtept>
+  <rtept lat="42.430950000" lon="-71.107628000">
+    <ele>23.469600</ele>
+<time>2001-06-02T00:18:15Z</time>
+    <name>BELLEVUE</name>
+    <cmt>BELLEVUE</cmt>
+    <desc>Bellevue Parking Lot</desc>
+    <sym>Parking Area</sym>
+<type>Parking</type>
+  </rtept>
+  <rtept lat="42.438666000" lon="-71.114079000">
+    <ele>43.384766</ele>
+<time>2001-11-28T21:05:28Z</time>
+    <name>6016</name>
+    <cmt>Bike Loop Connector</cmt>
+    <desc>Bike Loop Connector</desc>
+    <sym>Waypoint</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.456469000" lon="-71.124651000">
+    <ele>89.916000</ele>
+<time>2001-06-02T03:26:59Z</time>
+    <name>5236BRIDGE</name>
+    <cmt>Bridge</cmt>
+    <desc>Bridge</desc>
+    <sym>Bridge</sym>
+<type>Bridge</type>
+  </rtept>
+  <rtept lat="42.465759000" lon="-71.119815000">
+    <ele>55.473600</ele>
+<time>2001-06-02T03:27:01Z</time>
+    <name>5376BRIDGE</name>
+    <cmt>Bridge</cmt>
+    <desc>Bridge</desc>
+    <sym>Bridge</sym>
+<type>Bridge</type>
+  </rtept>
+  <rtept lat="42.442993000" lon="-71.105878000">
+    <ele>52.730400</ele>
+<time>2001-06-02T03:27:05Z</time>
+    <name>6181CROSS</name>
+    <cmt>Crossing</cmt>
+    <desc>Crossing</desc>
+    <sym>Crossing</sym>
+<type>Crossing</type>
+  </rtept>
+  <rtept lat="42.435472000" lon="-71.109664000">
+    <ele>45.110400</ele>
+<time>2001-06-02T03:27:05Z</time>
+    <name>6042CROSS</name>
+    <cmt>Crossing</cmt>
+    <desc>Crossing</desc>
+    <sym>Crossing</sym>
+<type>Crossing</type>
+  </rtept>
+  <rtept lat="42.458516000" lon="-71.103646000">
+    <name>DARKHOLLPO</name>
+    <cmt>Dark Hollow Pond</cmt>
+    <desc>Dark Hollow Pond</desc>
+    <sym>Fishing Area</sym>
+  </rtept>
+  <rtept lat="42.443109000" lon="-71.112675000">
+    <ele>56.083200</ele>
+<time>2001-06-02T03:26:57Z</time>
+    <name>6121DEAD</name>
+    <cmt>Dead End</cmt>
+    <desc>Dead End</desc>
+    <sym>Danger Area</sym>
+<type>Dead End</type>
+  </rtept>
+  <rtept lat="42.449866000" lon="-71.119298000">
+    <ele>117.043200</ele>
+<time>2001-06-02T03:26:59Z</time>
+    <name>5179DEAD</name>
+    <cmt>Dead End</cmt>
+    <desc>Dead End</desc>
+    <sym>Danger Area</sym>
+<type>Dead End</type>
+  </rtept>
+  <rtept lat="42.459629000" lon="-71.116524000">
+    <ele>69.494400</ele>
+<time>2001-06-02T03:27:01Z</time>
+    <name>5299DEAD</name>
+    <cmt>Dead End</cmt>
+    <desc>Dead End</desc>
+    <sym>Danger Area</sym>
+<type>Dead End</type>
+  </rtept>
+  <rtept lat="42.465485000" lon="-71.119148000">
+    <ele>56.997600</ele>
+<time>2001-06-02T03:27:02Z</time>
+    <name>5376DEAD</name>
+    <cmt>Dead End</cmt>
+    <desc>Dead End</desc>
+    <sym>Danger Area</sym>
+<type>Dead End</type>
+  </rtept>
+  <rtept lat="42.462776000" lon="-71.109986000">
+    <ele>46.939200</ele>
+<time>2001-06-02T03:27:03Z</time>
+    <name>6353DEAD</name>
+    <cmt>Dead End</cmt>
+    <desc>Dead End</desc>
+    <sym>Danger Area</sym>
+<type>Dead End</type>
+  </rtept>
+  <rtept lat="42.446793000" lon="-71.108784000">
+    <ele>61.264800</ele>
+<time>2001-06-02T03:27:04Z</time>
+    <name>6155DEAD</name>
+    <cmt>Dead End</cmt>
+    <desc>Dead End</desc>
+    <sym>Danger Area</sym>
+<type>Dead End</type>
+  </rtept>
+  <rtept lat="42.451204000" lon="-71.126602000">
+    <ele>110.947200</ele>
+<time>2001-06-02T03:26:59Z</time>
+    <name>GATE14</name>
+    <cmt>Gate 14</cmt>
+    <desc>Gate 14</desc>
+    <sym>Truck Stop</sym>
+<type>Road</type>
+  </rtept>
+  <rtept lat="42.458499000" lon="-71.122078000">
+    <ele>77.724000</ele>
+<time>2001-06-02T03:27:00Z</time>
+    <name>GATE16</name>
+    <cmt>Gate 16</cmt>
+    <desc>Gate 16</desc>
+    <sym>Truck Stop</sym>
+<type>Road</type>
+  </rtept>
+  <rtept lat="42.459376000" lon="-71.119238000">
+    <ele>65.836800</ele>
+<time>2001-06-02T03:27:01Z</time>
+    <name>GATE17</name>
+    <cmt>Gate 17</cmt>
+    <desc>Gate 17</desc>
+    <sym>Truck Stop</sym>
+<type>Road</type>
+  </rtept>
+  <rtept lat="42.466353000" lon="-71.119240000">
+    <ele>57.302400</ele>
+<time>2001-06-02T03:27:02Z</time>
+    <name>GATE19</name>
+    <cmt>Gate 19</cmt>
+    <desc>Gate 19</desc>
+    <sym>Truck Stop</sym>
+<type>Road</type>
+  </rtept>
+  <rtept lat="42.468655000" lon="-71.107697000">
+    <ele>49.377600</ele>
+<time>2001-06-02T03:27:03Z</time>
+    <name>GATE21</name>
+    <cmt>Gate 21</cmt>
+    <desc>Gate 21</desc>
+    <sym>Truck Stop</sym>
+<type>Road</type>
+  </rtept>
+  <rtept lat="42.456718000" lon="-71.102973000">
+    <ele>81.076800</ele>
+<time>2001-06-02T03:27:03Z</time>
+    <name>GATE24</name>
+    <cmt>Gate 24</cmt>
+    <desc>Gate 24</desc>
+    <sym>Truck Stop</sym>
+<type>Road</type>
+  </rtept>
+  <rtept lat="42.430847000" lon="-71.107690000">
+    <ele>21.515015</ele>
+<time>2001-11-28T21:05:28Z</time>
+    <name>GATE5</name>
+    <cmt>Gate 5</cmt>
+    <desc>Gate 5</desc>
+    <sym>Truck Stop</sym>
+<type>Truck Stop</type>
+  </rtept>
+  <rtept lat="42.431240000" lon="-71.109236000">
+    <ele>26.561890</ele>
+<time>2001-11-07T23:53:41Z</time>
+    <name>GATE6</name>
+    <cmt>Gate 6</cmt>
+    <desc>Gate 6</desc>
+    <sym>Waypoint</sym>
+<type>Trail Head</type>
+  </rtept>
+  <rtept lat="42.439502000" lon="-71.106556000">
+    <ele>32.004000</ele>
+<time>2001-06-02T00:18:16Z</time>
+    <name>6077LOGS</name>
+    <cmt>Log Crossing</cmt>
+    <desc>Log Crossing</desc>
+    <sym>Amusement Park</sym>
+<type>Obstacle</type>
+  </rtept>
+  <rtept lat="42.449765000" lon="-71.122320000">
+    <ele>119.809082</ele>
+<time>2001-11-07T23:53:41Z</time>
+    <name>5148NANEPA</name>
+    <cmt>Nanepashemet Road Crossing</cmt>
+    <desc>Nanepashemet Road Crossing</desc>
+    <sym>Waypoint</sym>
+<type>Trail Head</type>
+  </rtept>
+  <rtept lat="42.457388000" lon="-71.119845000">
+    <ele>73.761600</ele>
+<time>2001-06-02T03:27:00Z</time>
+    <name>5267OBSTAC</name>
+    <cmt>Obstacle</cmt>
+    <desc>Obstacle</desc>
+    <sym>Amusement Park</sym>
+<type>Obstacle</type>
+  </rtept>
+  <rtept lat="42.434980000" lon="-71.109942000">
+    <ele>45.307495</ele>
+<time>2001-11-07T23:53:41Z</time>
+    <name>PANTHRCAVE</name>
+    <cmt>Panther Cave</cmt>
+    <desc>Panther Cave</desc>
+    <sym>Tunnel</sym>
+<type>Tunnel</type>
+  </rtept>
+  <rtept lat="42.453256000" lon="-71.121211000">
+    <ele>77.992066</ele>
+<time>2001-11-07T23:53:41Z</time>
+    <name>5252PURPLE</name>
+    <cmt>Purple Rock Hill</cmt>
+    <desc>Purple Rock Hill</desc>
+    <sym>Summit</sym>
+<type>Summit</type>
+  </rtept>
+  <rtept lat="42.457734000" lon="-71.117481000">
+    <ele>67.970400</ele>
+<time>2001-06-02T03:27:01Z</time>
+    <name>5287WATER</name>
+    <cmt>Reservoir</cmt>
+    <desc>Reservoir</desc>
+    <sym>Swimming Area</sym>
+<type>Reservoir</type>
+  </rtept>
+  <rtept lat="42.459278000" lon="-71.124574000">
+    <ele>81.076800</ele>
+<time>2001-06-02T03:27:00Z</time>
+    <name>5239ROAD</name>
+    <cmt>Road</cmt>
+    <desc>Road</desc>
+    <sym>Truck Stop</sym>
+<type>Road</type>
+  </rtept>
+  <rtept lat="42.458782000" lon="-71.118991000">
+    <ele>67.360800</ele>
+<time>2001-06-02T03:27:01Z</time>
+    <name>5278ROAD</name>
+    <cmt>Road</cmt>
+    <desc>Road</desc>
+    <sym>Truck Stop</sym>
+<type>Road</type>
+  </rtept>
+  <rtept lat="42.439993000" lon="-71.120925000">
+    <ele>53.949600</ele>
+<time>2001-06-02T00:18:14Z</time>
+    <name>5058ROAD</name>
+    <cmt>ROAD CROSSING</cmt>
+    <desc>Road Crossing</desc>
+    <sym>Dot</sym>
+<type>Road Crossing</type>
+  </rtept>
+  <rtept lat="42.453415000" lon="-71.106782000">
+    <ele>69.799200</ele>
+<time>2001-06-02T00:18:13Z</time>
+    <name>SHEEPFOLD</name>
+    <cmt>Sheepfold Parking Lot</cmt>
+    <desc>Sheepfold Parking Lot</desc>
+    <sym>Parking Area</sym>
+<type>Parking</type>
+  </rtept>
+  <rtept lat="42.455956000" lon="-71.107483000">
+    <ele>64.008000</ele>
+<time>2001-06-02T03:27:04Z</time>
+    <name>SOAPBOX</name>
+    <cmt>Soap Box Derby Track</cmt>
+    <desc>Soap Box Derby Track</desc>
+    <sym>Cemetery</sym>
+<type>Intersection</type>
+  </rtept>
+  <rtept lat="42.465913000" lon="-71.119328000">
+    <ele>64.533692</ele>
+<time>2001-11-07T23:53:41Z</time>
+    <name>5376STREAM</name>
+    <cmt>Stream Crossing</cmt>
+    <desc>Stream Crossing</desc>
+    <sym>Bridge</sym>
+<type>Bridge</type>
+  </rtept>
+  <rtept lat="42.445359000" lon="-71.122845000">
+    <ele>61.649902</ele>
+<time>2001-11-28T21:05:28Z</time>
+    <name>5144SUMMIT</name>
+    <cmt>Summit</cmt>
+    <desc>Summit</desc>
+    <sym>Summit</sym>
+<type>Summit</type>
+  </rtept>
+  <rtept lat="42.441727000" lon="-71.121676000">
+    <ele>67.360800</ele>
+<time>2001-06-02T00:18:16Z</time>
+    <name>5150TANK</name>
+    <cmt>WATER TANK</cmt>
+    <desc>Water Tank</desc>
+    <sym>Museum</sym>
+<type>Water Tank</type>
+  </rtept>
+</rte>
+</gpx>
diff --git a/reference/transform-wpt.gpx b/reference/transform-wpt.gpx
new file mode 100644 (file)
index 0000000..7e01e95
--- /dev/null
@@ -0,0 +1,378 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="42.430950000" minlon ="-71.122845000" maxlat="42.467110000" maxlon="-71.105116000" />
+<wpt lat="42.430950000" lon="-71.107628000">
+  <ele>23.469600</ele>
+<time>2001-06-02T00:18:15Z</time>
+  <name>BELLEVUE</name>
+  <cmt>BELLEVUE</cmt>
+  <desc>Bellevue Parking Lot</desc>
+  <sym>Parking Area</sym>
+</wpt>
+<wpt lat="42.431240000" lon="-71.109236000">
+  <ele>26.561890</ele>
+<time>2001-11-07T23:53:41Z</time>
+  <name>GATE6</name>
+  <cmt>Gate 6</cmt>
+  <desc>Gate 6</desc>
+  <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.434980000" lon="-71.109942000">
+  <ele>45.307495</ele>
+<time>2001-11-07T23:53:41Z</time>
+  <name>PANTHRCAVE</name>
+  <cmt>Panther Cave</cmt>
+  <desc>Panther Cave</desc>
+  <sym>Tunnel</sym>
+</wpt>
+<wpt lat="42.436757000" lon="-71.113223000">
+  <ele>37.616943</ele>
+<time>2001-11-28T21:05:28Z</time>
+  <name>6014MEADOW</name>
+  <cmt>6014MEADOW</cmt>
+  <desc>6014MEADOW</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.439018000" lon="-71.114456000">
+  <ele>56.388000</ele>
+<time>2001-06-02T03:26:55Z</time>
+  <name>6006</name>
+  <cmt>600698</cmt>
+  <desc>600698</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.438594000" lon="-71.114803000">
+  <ele>46.028564</ele>
+<time>2001-11-28T21:05:28Z</time>
+  <name>6006BLUE</name>
+  <cmt>6006BLUE</cmt>
+  <desc>6006BLUE</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.438917000" lon="-71.116146000">
+  <ele>44.826904</ele>
+<time>2001-11-16T23:03:38Z</time>
+  <name>5096</name>
+  <cmt>5096</cmt>
+  <desc>5096</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.438878000" lon="-71.119277000">
+  <ele>44.586548</ele>
+<time>2001-11-28T21:05:28Z</time>
+  <name>5066</name>
+  <cmt>5066</cmt>
+  <desc>5066</desc>
+  <sym>Crossing</sym>
+</wpt>
+<wpt lat="42.439227000" lon="-71.119689000">
+  <ele>57.607200</ele>
+<time>2001-06-02T03:26:55Z</time>
+  <name>5067</name>
+  <cmt>5067</cmt>
+  <desc>5067</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.439993000" lon="-71.120925000">
+  <ele>53.949600</ele>
+<time>2001-06-02T00:18:14Z</time>
+  <name>5058ROAD</name>
+  <cmt>ROAD CROSSING</cmt>
+  <desc>Road Crossing</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.441727000" lon="-71.121676000">
+  <ele>67.360800</ele>
+<time>2001-06-02T00:18:16Z</time>
+  <name>5150TANK</name>
+  <cmt>WATER TANK</cmt>
+  <desc>Water Tank</desc>
+  <sym>Museum</sym>
+</wpt>
+<wpt lat="42.443904000" lon="-71.122044000">
+  <ele>50.594727</ele>
+<time>2001-11-28T21:05:28Z</time>
+  <name>5142</name>
+  <cmt>5142</cmt>
+  <desc>5142</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.445359000" lon="-71.122845000">
+  <ele>61.649902</ele>
+<time>2001-11-28T21:05:28Z</time>
+  <name>5144SUMMIT</name>
+  <cmt>Summit</cmt>
+  <desc>Summit</desc>
+  <sym>Summit</sym>
+</wpt>
+<wpt lat="42.447298000" lon="-71.121447000">
+  <ele>127.711200</ele>
+<time>2001-06-02T03:26:58Z</time>
+  <name>5156</name>
+  <cmt>5156</cmt>
+  <desc>5156</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.449765000" lon="-71.122320000">
+  <ele>119.809082</ele>
+<time>2001-11-07T23:53:41Z</time>
+  <name>5148NANEPA</name>
+  <cmt>Nanepashemet Road Crossing</cmt>
+  <desc>Nanepashemet Road Crossing</desc>
+  <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.451442000" lon="-71.121746000">
+  <ele>74.627442</ele>
+<time>2001-11-07T23:53:41Z</time>
+  <name>5258</name>
+  <cmt>5258</cmt>
+  <desc>5258</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.453256000" lon="-71.121211000">
+  <ele>77.992066</ele>
+<time>2001-11-07T23:53:41Z</time>
+  <name>5252PURPLE</name>
+  <cmt>Purple Rock Hill</cmt>
+  <desc>Purple Rock Hill</desc>
+  <sym>Summit</sym>
+</wpt>
+<wpt lat="42.456252000" lon="-71.119356000">
+  <ele>78.713135</ele>
+<time>2001-11-07T23:53:41Z</time>
+  <name>527631</name>
+  <cmt>527631</cmt>
+  <desc>527631</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.456592000" lon="-71.119676000">
+  <ele>78.713135</ele>
+<time>2001-11-07T23:53:41Z</time>
+  <name>527614</name>
+  <cmt>527614</cmt>
+  <desc>527614</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.457388000" lon="-71.119845000">
+  <ele>73.761600</ele>
+<time>2001-06-02T03:27:00Z</time>
+  <name>5267OBSTAC</name>
+  <cmt>Obstacle</cmt>
+  <desc>Obstacle</desc>
+  <sym>Amusement Park</sym>
+</wpt>
+<wpt lat="42.458148000" lon="-71.119135000">
+  <ele>68.275200</ele>
+<time>2001-06-02T03:27:00Z</time>
+  <name>5278</name>
+  <cmt>5278</cmt>
+  <desc>5278</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.459377000" lon="-71.117693000">
+  <ele>64.008000</ele>
+<time>2001-06-02T03:27:01Z</time>
+  <name>5289</name>
+  <cmt>5289</cmt>
+  <desc>5289</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.464183000" lon="-71.119828000">
+  <ele>52.997925</ele>
+<time>2001-11-28T21:05:28Z</time>
+  <name>5374FIRE</name>
+  <cmt>5374FIRE</cmt>
+  <desc>5374FIRE</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.465650000" lon="-71.119399000">
+  <ele>56.388000</ele>
+<time>2001-06-02T03:27:02Z</time>
+  <name>5376</name>
+  <cmt>5376</cmt>
+  <desc>5376</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.465913000" lon="-71.119328000">
+  <ele>64.533692</ele>
+<time>2001-11-07T23:53:41Z</time>
+  <name>5376STREAM</name>
+  <cmt>Stream Crossing</cmt>
+  <desc>Stream Crossing</desc>
+  <sym>Bridge</sym>
+</wpt>
+<wpt lat="42.467110000" lon="-71.113574000">
+  <ele>53.644800</ele>
+<time>2001-06-02T03:27:02Z</time>
+  <name>6328</name>
+  <cmt>6328</cmt>
+  <desc>6328</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.466459000" lon="-71.110067000">
+  <ele>48.768000</ele>
+<time>2001-06-02T03:27:02Z</time>
+  <name>635722</name>
+  <cmt>635722</cmt>
+  <desc>635722</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.466557000" lon="-71.109410000">
+  <ele>49.072800</ele>
+<time>2001-06-02T03:27:02Z</time>
+  <name>635783</name>
+  <cmt>635783</cmt>
+  <desc>635783</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.463495000" lon="-71.107117000">
+  <ele>62.484000</ele>
+<time>2001-06-02T03:27:03Z</time>
+  <name>6373</name>
+  <cmt>6373</cmt>
+  <desc>6373</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.465687000" lon="-71.107360000">
+  <ele>87.782400</ele>
+<time>2001-06-02T03:27:03Z</time>
+  <name>BEAR HILL</name>
+  <cmt>BEAR HILL TOWER</cmt>
+  <desc>Bear Hill Tower</desc>
+  <sym>Tall Tower</sym>
+</wpt>
+<wpt lat="42.459986000" lon="-71.106170000">
+  <ele>72.945191</ele>
+<time>2001-11-16T23:03:38Z</time>
+  <name>6289</name>
+  <cmt>6289</cmt>
+  <desc>6289</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.457616000" lon="-71.105116000">
+  <ele>72.847200</ele>
+<time>2001-06-02T03:27:04Z</time>
+  <name>6297</name>
+  <cmt>6297</cmt>
+  <desc>6297</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.453845000" lon="-71.105206000">
+  <ele>66.696655</ele>
+<time>2001-11-16T23:03:38Z</time>
+  <name>6283</name>
+  <cmt>6283</cmt>
+  <desc>6283</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.451430000" lon="-71.105413000">
+  <ele>57.564209</ele>
+<time>2001-11-16T23:03:38Z</time>
+  <name>6280</name>
+  <cmt>6280</cmt>
+  <desc>6280</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.448448000" lon="-71.106158000">
+  <ele>62.179200</ele>
+<time>2001-06-02T03:27:04Z</time>
+  <name>6177</name>
+  <cmt>6177</cmt>
+  <desc>6177</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.447804000" lon="-71.106624000">
+  <ele>62.484000</ele>
+<time>2001-06-02T03:27:04Z</time>
+  <name>6176</name>
+  <cmt>6176</cmt>
+  <desc>6176</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.444773000" lon="-71.108882000">
+  <ele>62.788800</ele>
+<time>2001-06-02T03:27:05Z</time>
+  <name>6153</name>
+  <cmt>6153</cmt>
+  <desc>6153</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.443592000" lon="-71.106301000">
+  <ele>55.473600</ele>
+<time>2001-06-02T03:27:05Z</time>
+  <name>6171</name>
+  <cmt>6171</cmt>
+  <desc>6171</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.442981000" lon="-71.111441000">
+  <ele>64.008000</ele>
+<time>2001-06-02T03:26:58Z</time>
+  <name>6131</name>
+  <cmt>6131</cmt>
+  <desc>6131</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.442196000" lon="-71.110975000">
+  <ele>64.008000</ele>
+<time>2001-06-02T03:26:55Z</time>
+  <name>6130</name>
+  <cmt>6130</cmt>
+  <desc>6130</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.441754000" lon="-71.113220000">
+  <ele>56.388000</ele>
+<time>2001-06-02T03:26:55Z</time>
+  <name>6029</name>
+  <cmt>6029</cmt>
+  <desc>6029</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.439018000" lon="-71.114456000">
+  <ele>56.388000</ele>
+<time>2001-06-02T03:26:55Z</time>
+  <name>6006</name>
+  <cmt>600698</cmt>
+  <desc>600698</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.436757000" lon="-71.113223000">
+  <ele>37.616943</ele>
+<time>2001-11-28T21:05:28Z</time>
+  <name>6014MEADOW</name>
+  <cmt>6014MEADOW</cmt>
+  <desc>6014MEADOW</desc>
+  <sym>Dot</sym>
+</wpt>
+<wpt lat="42.434980000" lon="-71.109942000">
+  <ele>45.307495</ele>
+<time>2001-11-07T23:53:41Z</time>
+  <name>PANTHRCAVE</name>
+  <cmt>Panther Cave</cmt>
+  <desc>Panther Cave</desc>
+  <sym>Tunnel</sym>
+</wpt>
+<wpt lat="42.431240000" lon="-71.109236000">
+  <ele>26.561890</ele>
+<time>2001-11-07T23:53:41Z</time>
+  <name>GATE6</name>
+  <cmt>Gate 6</cmt>
+  <desc>Gate 6</desc>
+  <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.430950000" lon="-71.107628000">
+  <ele>23.469600</ele>
+<time>2001-06-02T00:18:15Z</time>
+  <name>BELLEVUE</name>
+  <cmt>BELLEVUE</cmt>
+  <desc>Bellevue Parking Lot</desc>
+  <sym>Parking Area</sym>
+</wpt>
+</gpx>
diff --git a/testo b/testo
index f4b94e18547938a871cbcd04306f35beefb59916..6c45e8b437fe9b650447f174824a5889b9031450 100755 (executable)
--- a/testo
+++ b/testo
@@ -1133,4 +1133,14 @@ compare ${TMPDIR}/ge-gc.kml ${REFERENCE}/earth-gc.kml
 ${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -o kml -F ${TMPDIR}/ge-eg.kml
 compare ${TMPDIR}/ge-eg.kml ${REFERENCE}/earth-expertgps.kml
 
+#
+# Transformation filter (transform) tests
+#
+rm -f ${TMPDIR}/transform*
+${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -x nuketypes,routes,tracks -x transform,rte=wpt,del=y -o gpx -F ${TMPDIR}/transform-rte.gpx
+compare ${TMPDIR}/transform-rte.gpx ${REFERENCE}/transform-rte.gpx
+${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -x nuketypes,waypoints,tracks -x transform,wpt=rte,del=y -o gpx -F ${TMPDIR}/transform-wpt.gpx
+compare ${TMPDIR}/transform-wpt.gpx ${REFERENCE}/transform-wpt.gpx
+
+
 exit 0
diff --git a/transform.c b/transform.c
new file mode 100644 (file)
index 0000000..4ad51ab
--- /dev/null
@@ -0,0 +1,194 @@
+/*
+
+    Transformation filter for GPS data.
+    
+    Copyright (C) 2006 Olaf Klein, o.b.klein@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+#include "defs.h"
+#include "filterdefs.h"
+
+#if FILTERS_ENABLED
+
+#include <ctype.h>
+
+#define MYNAME "transform"
+
+static char current_target;
+static route_head *current_trk;
+static route_head *current_rte;
+
+static char *opt_routes, *opt_tracks, *opt_waypts, *opt_delete;
+
+static
+arglist_t transform_args[] = {
+       {"wpt", &opt_waypts, "Transformate track(s) or route(s) into waypoint(s) [R/T].", NULL, 
+               ARGTYPE_STRING, ARG_NOMINMAX},
+       {"rte", &opt_routes, "Transformate waypoint(s) or track(s) into route(s) [W/T].", NULL, 
+               ARGTYPE_STRING, ARG_NOMINMAX},
+       {"trk", &opt_tracks, "Transformate waypoint(s) or route(s) into tracks(s) [W/R].", NULL, 
+               ARGTYPE_STRING, ARG_NOMINMAX},
+       {"del", &opt_delete, "Delete source data after transformation.", "N", 
+               ARGTYPE_BOOL, ARG_NOMINMAX},
+       ARG_TERMINATOR
+};
+
+static void
+transform_waypoints(void)
+{
+       queue *elem, *tmp;
+       route_head *rte;
+       
+       rte = route_head_alloc();
+       switch(current_target) {
+               case 'R': route_add_head(rte); break;
+               case 'T': track_add_head(rte); break;
+       }
+       
+       QUEUE_FOR_EACH(&waypt_head, elem, tmp)
+       {
+               waypoint *wpt = (waypoint *) elem;
+               
+               wpt = waypt_dupe(wpt);
+               switch(current_target) {
+                       case 'R': route_add_wpt(rte, wpt); break;
+                       case 'T': track_add_wpt(rte, wpt); break;
+               }
+       }
+}
+
+static void
+transform_rte_disp_hdr_cb(const route_head *rte)
+{
+       if (current_target == 'T') {
+               current_trk = route_head_alloc();
+               track_add_head(current_trk);
+               if (rte->rte_name && *rte->rte_name)
+                       xasprintf(&current_trk->rte_desc, "Generated from route %s", rte->rte_name);
+       }
+}
+
+static void
+transform_trk_disp_hdr_cb(const route_head *trk)
+{
+       if (current_target == 'R') {
+               current_rte = route_head_alloc();
+               route_add_head(current_rte);
+               if (trk->rte_name && *trk->rte_name)
+                       xasprintf(&current_rte->rte_desc, "Generated from track %s", trk->rte_name);
+       }
+}
+
+static void
+transform_any_disp_wpt_cb(const waypoint *wpt)
+{
+       waypoint *temp = waypt_dupe(wpt);
+       waypt_add(temp);
+}
+
+static void
+transform_routes(void)
+{
+       route_disp_all(transform_rte_disp_hdr_cb, NULL, transform_any_disp_wpt_cb);
+}
+
+static void
+transform_tracks(void)
+{
+       track_disp_all(transform_trk_disp_hdr_cb, NULL, transform_any_disp_wpt_cb);
+}
+
+/*******************************************************************************
+* %%%        global callbacks called by gpsbabel main process              %%% *
+*******************************************************************************/
+
+static void
+transform_init(const char *args)       
+{
+}
+
+static void
+transform_deinit(void)                 
+{
+}
+
+static void 
+transform_process(void)
+{
+       int delete_after = (opt_delete && (*opt_delete == '1')) ? 1 : 0;
+
+       if (opt_waypts != NULL) {
+               current_target = 'W';
+               switch(toupper(*opt_waypts)) {
+                       case 'R':
+                               transform_routes();
+                               if (delete_after) route_flush_all_routes();
+                               break;
+                       case 'T':
+                               transform_tracks();
+                               if (delete_after) route_flush_all_tracks();
+                               break;
+                       default:
+                               fatal(MYNAME ": Invalid option value (%s)!\n", opt_waypts);
+               }
+       }
+       if (opt_routes != NULL) {
+               current_target = 'R';
+               switch(toupper(*opt_routes)) {
+                       case 'W':
+                               transform_waypoints();
+                               if (delete_after) waypt_flush_all();
+                               break;
+                       case 'T':
+                               transform_tracks();
+                               if (delete_after) route_flush_all_tracks();
+                               break;
+                       default:
+                               fatal(MYNAME ": Invalid option value (%s)!\n", opt_routes);
+               }
+       }
+       if (opt_tracks != NULL) {
+               current_target = 'T';
+               switch(toupper(*opt_tracks)) {
+                       case 'W':
+                               transform_waypoints();
+                               if (delete_after) waypt_flush_all();
+                               break;
+                       case 'R':
+                               transform_routes();
+                               if (delete_after) route_flush_all_routes();
+                               break;
+                       default:
+                               fatal(MYNAME ": Invalid option value (%s)!\n", opt_tracks);
+               }
+       }
+}
+
+/*******************************************************************************/
+
+filter_vecs_t transform_vecs = {
+       transform_init,
+       transform_process,
+       transform_deinit,
+       NULL,
+       transform_args
+};
+
+/*******************************************************************************/
+
+#endif // FILTERS_ENABLED
diff --git a/xmldoc/filters/transform.xml b/xmldoc/filters/transform.xml
new file mode 100644 (file)
index 0000000..76202cd
--- /dev/null
@@ -0,0 +1,19 @@
+<para>
+  This filter can be used to convert GPS data between different data types.
+</para>
+<para>
+  Not all known and unknown GPS data formats has beed designed on
+  one common idea. So we have waypoint-only, route-only, track-only
+  and formats containing more than one of them.
+</para>
+<para>
+  To bring such different formats together we've implemented the transform 
+  filter. 
+</para>
+<para>
+  The following example show you how to create a route from a waypoint table.
+  <screen format="linespecific">gpsbabel -i csv waypts.txt -x transform,rte=wpt -o gpx -F route.gpx</screen>
+  Only the first letter of option value decides which transformation will be done.
+  Depending on the used option it can be only 'W' for waypoints, 'R' for routes or
+  'T' for tracks.
+</para>